/**
 * 
 */
package com.vision.sales.cm.serv.rpc;

import java.util.List;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.data.shared.loader.PagingLoadResult;
import com.vision.core.cm.db.data.Company;
import com.vision.core.cm.serv.rpc.AbstractServiceAsync;
import com.vision.sales.cl.ui.component.TransactionLoadConfig;
import com.vision.sales.cm.data.TransactionStatus;
import com.vision.sales.cm.db.data.CollectionItem;
import com.vision.sales.cm.db.data.Customer;
import com.vision.sales.cm.db.data.DeliveryReceipt;
import com.vision.sales.cm.db.data.SalesInvoice;

/**
 * @author Mark
 * 
 * @see SalesInvoiceService
 */
public interface SalesInvoiceServiceAsync extends AbstractServiceAsync<SalesInvoice> {  

	void getInvoiceNoAndIdOnly(AsyncCallback<List<SalesInvoice>> callback);
	
	void getSalesInvoiceSummary(long salesInvoiceId, AsyncCallback<CollectionItem> callback);
	
	void getSalesInvoicesForCollection(Company company, Customer customer, AsyncCallback<List<SalesInvoice>> callback);
	
	void getSalesInvoicesUnderCollection(long collectionId, AsyncCallback<List<SalesInvoice>> callback);
	
	void getList(TransactionLoadConfig config, AsyncCallback<PagingLoadResult<SalesInvoice>> callback);
	
	void getSalesInvoices(TransactionStatus status, AsyncCallback<List<SalesInvoice>> callback);

	void postSalesInvoices(List<SalesInvoice> invoices, AsyncCallback<List<SalesInvoice>> callback);
	
	void getDeliveryReceiptsByInvoice(long salesInvoiceId, AsyncCallback<List<DeliveryReceipt>> callback);

	void getCollectionItemsByInvoice(long salesInvoiceId, AsyncCallback<List<CollectionItem>> callback);
	
	void getSalesInvoicesForAdvancePayment(long advancePaymentId, AsyncCallback<List<SalesInvoice>> callback);
	
}
